/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Entidades;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author ccedeno
 */
@Entity
@Table(name = "trabajador", catalog = "emilima_tradoc", schema = "")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Trabajador.findAll", query = "SELECT t FROM Trabajador t"),
    @NamedQuery(name = "Trabajador.findByIdResponsable", query = "SELECT t FROM Trabajador t WHERE t.idResponsable = :idResponsable"),
    @NamedQuery(name = "Trabajador.findByNombres", query = "SELECT t FROM Trabajador t WHERE t.nombres = :nombres"),
    @NamedQuery(name = "Trabajador.findByApePat", query = "SELECT t FROM Trabajador t WHERE t.apePat = :apePat"),
    @NamedQuery(name = "Trabajador.findByApeMat", query = "SELECT t FROM Trabajador t WHERE t.apeMat = :apeMat"),
    @NamedQuery(name = "Trabajador.findByFechaReg", query = "SELECT t FROM Trabajador t WHERE t.fechaReg = :fechaReg"),
    @NamedQuery(name = "Trabajador.findByFechaNaci", query = "SELECT t FROM Trabajador t WHERE t.fechaNaci = :fechaNaci"),
    @NamedQuery(name = "Trabajador.findByCorreo", query = "SELECT t FROM Trabajador t WHERE t.correo = :correo")})
public class Trabajador implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 8)
    @Column(name = "id_responsable", nullable = false, length = 8)
    private String idResponsable;
    @Size(max = 45)
    @Column(name = "nombres", length = 45)
    private String nombres;
    @Size(max = 45)
    @Column(name = "ape_pat", length = 45)
    private String apePat;
    @Size(max = 45)
    @Column(name = "ape_mat", length = 45)
    private String apeMat;
    @Column(name = "fecha_reg")
    @Temporal(TemporalType.DATE)
    private Date fechaReg;
    @Column(name = "fecha_naci")
    @Temporal(TemporalType.DATE)
    private Date fechaNaci;
    @Size(max = 100)
    @Column(name = "correo", length = 100)
    private String correo;
    @JoinColumn(name = "fk_usuario", referencedColumnName = "id_usuario", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Usuario usuario;
    @JoinColumn(name = "fk_estado", referencedColumnName = "id_estado", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Estado estado;
    @JoinColumn(name = "fk_area", referencedColumnName = "idarea", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Area area;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "trabajador", fetch = FetchType.LAZY)
    private List<Expediente> expedienteList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "trabajador", fetch = FetchType.LAZY)
    private List<HisMovReg> hisMovRegList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "trabajador", fetch = FetchType.LAZY)
    private List<MovExp> movExpList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "trabajador", fetch = FetchType.LAZY)
    private List<MovEncarga> movEncargaList;

    public Trabajador() {
    }

    public Trabajador(String idResponsable) {
        this.idResponsable = idResponsable;
    }

    public String getIdResponsable() {
        return idResponsable;
    }

    public void setIdResponsable(String idResponsable) {
        this.idResponsable = idResponsable;
    }

    public String getNombres() {
        return nombres;
    }

    public void setNombres(String nombres) {
        this.nombres = nombres;
    }

    public String getApePat() {
        return apePat;
    }

    public void setApePat(String apePat) {
        this.apePat = apePat;
    }

    public String getApeMat() {
        return apeMat;
    }

    public void setApeMat(String apeMat) {
        this.apeMat = apeMat;
    }

    public Date getFechaReg() {
        return fechaReg;
    }

    public void setFechaReg(Date fechaReg) {
        this.fechaReg = fechaReg;
    }

    public Date getFechaNaci() {
        return fechaNaci;
    }

    public void setFechaNaci(Date fechaNaci) {
        this.fechaNaci = fechaNaci;
    }

    public String getCorreo() {
        return correo;
    }

    public void setCorreo(String correo) {
        this.correo = correo;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public Estado getEstado() {
        return estado;
    }

    public void setEstado(Estado estado) {
        this.estado = estado;
    }

    public Area getArea() {
        return area;
    }

    public void setArea(Area area) {
        this.area = area;
    }

    @XmlTransient
    public List<Expediente> getExpedienteList() {
        return expedienteList;
    }

    public void setExpedienteList(List<Expediente> expedienteList) {
        this.expedienteList = expedienteList;
    }

    @XmlTransient
    public List<HisMovReg> getHisMovRegList() {
        return hisMovRegList;
    }

    public void setHisMovRegList(List<HisMovReg> hisMovRegList) {
        this.hisMovRegList = hisMovRegList;
    }

    @XmlTransient
    public List<MovExp> getMovExpList() {
        return movExpList;
    }

    public void setMovExpList(List<MovExp> movExpList) {
        this.movExpList = movExpList;
    }

    @XmlTransient
    public List<MovEncarga> getMovEncargaList() {
        return movEncargaList;
    }

    public void setMovEncargaList(List<MovEncarga> movEncargaList) {
        this.movEncargaList = movEncargaList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idResponsable != null ? idResponsable.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Trabajador)) {
            return false;
        }
        Trabajador other = (Trabajador) object;
        if ((this.idResponsable == null && other.idResponsable != null) || (this.idResponsable != null && !this.idResponsable.equals(other.idResponsable))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
//        return "Entidades.Trabajador[ idResponsable=" + idResponsable + " ]";
                return  idResponsable +" "+" - " +apePat+" "+apeMat+" "+nombres;
    }
}
